﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using Microsoft.Xna.Framework.Graphics;

namespace EpsiRisk.DonneesPlateau
{
    [XmlType]
    public class ClassJoueur
    {
        /// <summary>
        /// couleur du joueur
        /// </summary>
        [XmlAttribute]
        public string Couleur
        {
            get { return cCouleur.ToString(); }
            set
            {
                System.Drawing.Color tmpColor = System.Drawing.Color.FromName(value);
                cCouleur = new Color(tmpColor.R, tmpColor.G, tmpColor.B, /*100*/tmpColor.A);
            }
        }

        [XmlIgnore]
        public static List<string> couleursPossibles = new List<string> { "CornFlowerBlue", "ForestGreen", "DarkOrange", "GreenYellow", "CadetBlue", "Gold", "Navy", "Chocolate" };

        [XmlAttribute]
        public string Nom;

        [XmlIgnore]
        public static List<string> nomsPossibles = new List<string> { "Jean", "Pierre", "Paul", "Jacques", "Yves", "Luc", "Guy", "Alex" };


        [XmlIgnore]
        public Color cCouleur;

        /// <summary>
        /// definit si il s'agit d'un joueur humain ou controlé par l'IA
        /// </summary>
        [XmlAttribute]
        public bool estHumain;

        /// <summary>
        /// nombres de territoires possédés par le joueur
        /// </summary>
        [XmlIgnore]
        public int nbTerritoires = 0;

        [XmlElement]
        public ClassObjectif mission;

        /// <summary>
        /// liste des joueurs instanciés
        /// </summary>
        [XmlIgnore]
        public static List<ClassJoueur> listeJoueurs = new List<ClassJoueur> { };

        /// <summary>
        /// constructeur vide
        /// </summary>
        public ClassJoueur()
        {
            this.Nom = attribuerNom();
            this.Couleur = attribuerCouleur();
            this.estHumain = true;
            listeJoueurs.Add(this);
        }

        /// <summary>
        /// constructeur avec couleur
        /// </summary>
        public ClassJoueur(string color)
        {
            listeJoueurs.Add(this);
            this.Couleur = color;
            this.estHumain = true;
        }

        string attribuerNom()
        {
            foreach (string nom in nomsPossibles)
            {
                bool attribuable = true;
                foreach (ClassJoueur j in listeJoueurs)
                {
                    attribuable = attribuable && (j.Nom != nom);
                }
                if (attribuable)
                {
                    return nom;
                }
            }
            return "Joueur9";
        }

        string attribuerCouleur()
        {
            foreach (string couleur in couleursPossibles)
            {
                bool attribuable = true;
                System.Drawing.Color tmpColor = System.Drawing.Color.FromName(couleur);
                Color tmpcCouleur = new Color(tmpColor.R, tmpColor.G, tmpColor.B, /*100*/tmpColor.A);
                foreach (ClassJoueur j in listeJoueurs)
                {


                    attribuable = attribuable && (j.cCouleur != tmpcCouleur);
                }
                if (attribuable)
                {
                    return couleur;
                }
            }
            return "Cyan";
        }
    }
}
